class Solution {  //根据规律，利用“同向双指针”(滑动窗口)来优化
public:
    int lengthOfLongestSubstring(string s) {
        //用数组代替哈希表(映射关系)，而此处char范围为ASCII值(128个)-》直接映射
        int hash[128];  
        int n = s.size(), len = 0;  
        for(int left = 0, right = 0; right < n; right++) 
        {
            hash[s[right]]++;  //进窗口
            while(hash[s[right]] > 1)  //判断是否有重复元素  
                //出窗口(hash[left]=0,说明该元素已出窗口)，left直接跳到重复元素的下一个位置
                hash[s[left++]]--; 
            len = max(len, right - left + 1);  //更新结果
        }
        return len;
    }
};